// spGuiListBoxFormBinding.js

// topContainer is always the div which has the class .spGuiListBoxFormBinding

// our javascripts namespace
var spGuiListBoxFormBinding = {};

///////////////////////////////////////////////////////////////////////////////////////////////////
// init
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.init = function(){

	jQuery(document).ready(function(){

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle startup
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( '.spGuiListBoxFormBinding' ).each(function(){
			spGuiListBoxFormBinding.updateListBox( jQuery(this) );
		});

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle when the user clicks on a list item
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( '.updateInfo' ).on( 'click', function(e) {
			// create main form (user selected)		
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			var id 	= jQuery(this).attr( 'data-id' );
			spGuiListBoxFormBinding.showForm( topContainer, id );
		});	

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle edit
		///////////////////////////////////////////////////////////////////////////////////////////////////
		
		jQuery( ".formEdit" ).on( "click", function(e){
			e.preventDefault();
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			spGuiListBoxFormBinding.edit( topContainer, jQuery(this) );
			return false;
		});
		
		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle save
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( ".formSave" ).on( "click", function(e){
			e.preventDefault();
			spGuiListBoxFormBinding.save( jQuery(this) );
			return false;
		});

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle new listboxitem
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( ".formNewListBoxItem" ).on( "click", function(e){
			e.preventDefault();
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			spGuiListBoxFormBinding.newListBoxItem( topContainer, jQuery(this) );
			return false;
		});

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle formNewOneToMany
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( ".formNewOneToMany" ).on( "click", function(e){
			e.preventDefault();
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			spGuiListBoxFormBinding.newOneToMany( topContainer, jQuery(this) );
			return false;
		});
		
		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle .formSaveNew
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( ".formSaveNew" ).on( "click", function(e){
			e.preventDefault();
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			spGuiListBoxFormBinding.createSave( topContainer, jQuery(this) );
			return false;
		});

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle .formDelete
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( ".formDelete" ).on( "click", function(e){
			e.preventDefault();
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			spGuiListBoxFormBinding.onDelete( topContainer, jQuery(this) );
			return false;
		});

		///////////////////////////////////////////////////////////////////////////////////////////////////
		// handle .formTrash
		///////////////////////////////////////////////////////////////////////////////////////////////////

		jQuery( ".formTrash" ).on( "click", function(e){
			e.preventDefault();
			var topContainer = jQuery(this).closest( ".spGuiListBoxFormBinding" );
			spGuiListBoxFormBinding.onTrash( topContainer, jQuery(this) );
			return false;
		});
	});
};

///////////////////////////////////////////////////////////////////////////////////////////////////
// onTrash
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.onTrash = function( topContainer, anchor )
{
	var dbClass	= anchor.attr( "data-database" );
	var id 		= anchor.attr( "data-id" );
	var name 	= anchor.attr( "data-name" );
	
	if ( confirm( 'Are you sure you want to trash: '+name ) )
	{
		// trash
		spAjaxCallback({ 
			callback 	: "spGuiListBoxFormBinding::doTrash", 
			param		: [
					{ name:'id',		value:id },
					{ name:'database', 	value:dbClass }
				],
			title		: 'Trashing...',
			success		: function(){
				topContainer.find( ".containerRight" ).html("");
				spGuiListBoxFormBinding.updateListBox( topContainer );
			}
		});
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// onDelete
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.onDelete = function( topContainer, anchor )
{
	var dbClass = anchor.attr( "data-database" );
	var id 		= anchor.attr( "data-id" );
	var name 	= anchor.attr( "data-name" );
	
	if ( confirm( 'Are you sure you want to delete: '+name ) )
	{
		// delete
		spAjaxCallback({ 
			callback 	: "spGuiListBoxFormBinding::doDelete", 
			param		: [
					{ name:'id',		value:id },
					{ name:'database', 	value:dbClass }
				],
			title		: 'Deleting...',
			success		: function(){
				topContainer.find( ".containerRight" ).html("");
				spGuiListBoxFormBinding.updateListBox( topContainer );
			}
		});
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// newListBoxItem
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.newListBoxItem = function( topContainer, anchor )
{
	var containerRight = topContainer.find( ".containerRight" );
	var dbClass = anchor.attr( "data-database" );
	
	spShowLoadingBar( containerRight );
	containerRight.load( 
		spHome+'/wp-admin/admin-ajax.php',
		{
			action 			: 'sp_ajax_response',
			formType		: 'loadonly',
			loadonly		: 'spGuiListBoxFormBinding::create',
			database		: dbClass
		},
		function complete(responseText, textStatus, XMLHttpRequest)
		{
			spInit();
		}
	);	
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// newOneToMany
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.newOneToMany = function( topContainer, anchor )
{
	var containerRight 	= topContainer.find( ".containerRight" );
	var dbClass 		= anchor.attr( "data-database" );
	var relationcol 	= anchor.attr( "data-relationcol" );
	var parentid 		= anchor.attr( "data-parentid" );
	
	spShowLoadingBar( containerRight );
	containerRight.load( 
		spHome+'/wp-admin/admin-ajax.php',
		{
			action 			: 'sp_ajax_response',
			formType		: 'loadonly',
			loadonly		: 'spGuiListBoxFormBinding::createOneToMany',
			database		: dbClass,
			relationcol		: relationcol,
			parentid		: parentid
		},
		function complete(responseText, textStatus, XMLHttpRequest)
		{
			spInit();
		}
	);	
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// createSave
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.createSave = function( topContainer, anchor )
{
	spOpenDialog( "Saving..." );

	var containerDlg = anchor.closest( '.spDialogStatic' );	
	var db = anchor.attr( "data-database" );

	var form = containerDlg.find( "form:first" );
	var ser	= form.serialize();

	jQuery.ajax({
		url 		: spHome+"/wp-admin/admin-ajax.php?action=sp_ajax_response",
		data 		: ser+"&formType=none&callback=spGuiListBoxFormBinding::createSave&database="+db,
		dataType 	: "json",
		type 		: "POST",
		success		: function(data){
			
			if ( data.formerrors!=undefined )
			{
				processFormErrors( data.formerrors );
				return;
			}

			// get the id for the main form and show the update version
			var containerRight = topContainer.find( ".containerRight" );
			containerRight.html("");
			spGuiListBoxFormBinding.updateListBox( topContainer );
		},
		error 		: function(XMLHttpRequest, textStatus, errorThrown){
			jQuery( "#spErrorMsg" ).html( 
				"AJAX ERROR:<br/><textarea>"+XMLHttpRequest.status+"</textarea>" +
				"<textarea>"+textStatus+"</textarea>" +
				"<textarea>"+XMLHttpRequest.responseText+"</textarea>"+
				"<textarea>"+errorThrown+"</textarea>"
			);
			
			jQuery( "#spErrorMsg" ).html( XMLHttpRequest.responseText );
		},
		complete 	: function()
		{
			spCloseDialog();
		}
	});		

	return false;
}	

///////////////////////////////////////////////////////////////////////////////////////////////////
// save
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.save = function( anchor )
{
	spOpenDialog( "Saving..." );

	var containerDlg = anchor.closest( '.spDialogStatic' );	
	var id = anchor.attr( "data-id" );
	var db = anchor.attr( "data-database" );;

	var form = containerDlg.find( "form:first" );
	var ser	= form.serialize();

	jQuery.ajax({
		url 		: spHome+"/wp-admin/admin-ajax.php?action=sp_ajax_response",
		data 		: ser+"&formType=none&callback=spGuiListBoxFormBinding::editSave&database="+db+"&id="+id,
		dataType 	: "json",
		type 		: "POST",
		success		: function(data){
			
			if ( data.formerrors!=undefined )
			{
				processFormErrors( data.formerrors );
				return;
			}

			// get the id for the main form and show the update version
			var topContainer = anchor.closest( ".spGuiListBoxFormBinding" );
			var containerLeft = topContainer.find( ".containerLeft" );
			var sel	= containerLeft.find( '.spGuiListBoxItem[data-selected=true]' );
			var id 	= sel.attr( 'data-id' );
			spGuiListBoxFormBinding.showForm( topContainer, id );
		},
		error 		: function(XMLHttpRequest, textStatus, errorThrown){
			jQuery( "#spErrorMsg" ).html( 
				"AJAX ERROR:<br/><textarea>"+XMLHttpRequest.status+"</textarea>" +
				"<textarea>"+textStatus+"</textarea>" +
				"<textarea>"+XMLHttpRequest.responseText+"</textarea>"+
				"<textarea>"+errorThrown+"</textarea>"
			);
			
			jQuery( "#spErrorMsg" ).html( XMLHttpRequest.responseText );
		},
		complete 	: function()
		{
			spCloseDialog();
		}
	});		

	return false;
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// edit
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.edit = function( topContainer, anchor )
{
	var containerRight = topContainer.find( ".containerRight" );
	var id = anchor.attr( "data-id" );
	var db = anchor.attr( "data-database" );;
	
	spShowLoadingBar( containerRight );
	containerRight.load( 
		spHome+'/wp-admin/admin-ajax.php',
		{
			action 			: 'sp_ajax_response',
			formType		: 'loadonly',
			loadonly		: 'spGuiListBoxFormBinding::showEditForm',
			database		: db,
			id				: id
		},
		function complete(responseText, textStatus, XMLHttpRequest)
		{
			spInit();
		}
	);	
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// updateListBox
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.updateListBox = function( topContainer )
{
	var formdatajson = jQuery.parseJSON( topContainer.attr( 'data-formdatajson' ) );
	var containerLeft = topContainer.find( ".containerLeft" );
	containerLeft.html( "<img src='"+spHome+"/wp-content/plugins/sigmaphp/images/ajax-loader.gif' alt=''/>" );
	containerLeft.load( 
		spHome+'/wp-admin/admin-ajax.php',
		{
			action 			: 'sp_ajax_response',
			formType		: 'loadonly',
			loadonly		: "spGuiListBoxFormBinding::updateListBox",
			formdata		: formdatajson
		}
	);
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// showForm
///////////////////////////////////////////////////////////////////////////////////////////////////

spGuiListBoxFormBinding.showForm = function ( topContainer, id ){
	var formdatajson = jQuery.parseJSON( topContainer.attr( 'data-formdatajson' ) );
	var containerRight = topContainer.find( ".containerRight" );

	spShowLoadingBar( containerRight );
	
	jQuery( containerRight ).load(
		spHome+'/wp-admin/admin-ajax.php',
		{
			action				: 'sp_ajax_response',
			formType			: 'loadonly',
			loadonly			: "spGuiListBoxFormBinding::showForm",
			id 					: id,
			formdata			: formdatajson
		},
		function complete(responseText, textStatus, XMLHttpRequest)
		{
			spInit();
		}
	);
}

spGuiListBoxFormBinding.init();